package com.tensquare.article.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.tensquare.article.dao.ArticleDao;
import com.tensquare.article.pojo.Article;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import util.IdWorker;

import java.util.List;
import java.util.Map;
import java.util.Set;

@Service
public class ArticleService {

    @Autowired
    private ArticleDao articleDao;

    @Autowired
    private IdWorker idWorker;

    //查询所有
    public List<Article> findAll(){
        return articleDao.selectList(null);
    }

    //根据ID查询
    public Article findById(String id){
        return articleDao.selectById(id);
    }

    //添加文章
    public void add(Article article){
        // 拼接字符串  Long型转为 String类型
        article.setId(idWorker.nextId() + "");
        article.setVisits(0);
        article.setThumbup(0);
        article.setComment(0);
        articleDao.insert(article);
    }

    //更新文章
    public void update(Article article) {
        articleDao.updateById(article);
    }

    //删除文章
    public void delete(String id) {
        articleDao.deleteById(id);
    }

    //分页查询
    //这里使用map集合的方式遍历查询条件。 也可以使用Article对象，但是效率较低
    public Page<Article> search(Map map, Integer page, Integer size) {

        //设置查询条件
        EntityWrapper wrapper = new EntityWrapper<Article>();
        Set<String> fieldSet = map.keySet();
        //条件查询，和动态sql一样先判断是否有值，如果有值（前面判断为true），
        //则后面加入查询条件，否则不加入查询条件
        for (String field : fieldSet) {
            wrapper.eq(null != map.get(field), field, map.get(field));
        }

        //设置分页参数
        Page page1 = new Page(page, size);

        //执行查询
        //第一个参数是分页参数，第二个参数是查询条件，得到结果集
        List list = articleDao.selectPage(page1, wrapper);

        //将结果集放入分页参数
        page1.setRecords(list);
        return page1;
    }
}














